﻿/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __4D192EBA_C08C_4413_B554_9D14976454F2__
#define __4D192EBA_C08C_4413_B554_9D14976454F2__

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

namespace xos_container
{
	class i_container;
}

namespace xos_common
{

	///////////////////////////////////////////////////////////////////////////////////////////////////////
	// 
	// common提供的对象
	// 
	enum enumObjType
	{
		// 
		// id生成器，考虑已有id,生成顺序的不重复id.可以在四字节数值中轮转(去除了-1, 0, 1三个值)
		// 
		OBJ_ID_GENERATOR,

		// 使用内存池分配内存
		OBJ_ALLOC,

		// 
		// misc
		// 
		OBJ_MISC,

		// 
		// md5
		// 
		OBJ_MD5,

		// 
		// sha
		// 
		OBJ_SHA
	};

	///////////////////////////////////////////////////////////////////////////////////////////////////////
	// 
	// 主接口
	// 
	class i_common : public xos::i_release
	{
	public:
		virtual ~i_common(){}

	public:
		// 
		// create objects
		// 
		virtual int create( enumObjType enumType, void ** ppv ) = 0;
	};

    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    // 
    // 导出函数定义
    // 
    typedef int ( * f_create )( xos_container::i_container * pContainer, i_common ** ppv );

} // xos_common

#endif // __4D192EBA_C08C_4413_B554_9D14976454F2__
